package leetcode;

/**
 * @author caifangyi
 * @date 2022/7/22
 */

/**
 *
 * 205. 同构字符串
 *
 * 给定两个字符串s和t，判断它们是否是同构的。
 *
 * 如果s中的字符可以按某种映射关系替换得到t，那么这两个字符串是同构的。
 *
 * 每个出现的字符都应当映射到另一个字符，同时不改变字符的顺序。不同字符不能映射到同一个字符上，相同字符只能映射到同一个字符上，字符可以映射到自己本身。
 *
 * 
 *
 * 示例 1:
 *
 * 输入：s = "egg", t = "add"
 * 输出：true
 * 示例 2：
 *
 * 输入：s = "foo", t = "bar"
 * 输出：false
 * 示例 3：
 *
 * 输入：s = "paper", t = "title"
 * 输出：true
 * 
 *
 * 提示：
 *
 * 1 <= s.length <= 5 * 104
 * t.length == s.length
 * s和t由任意有效的 ASCII 字符组成
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/isomorphic-strings
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Day0205 {

    public static void main(String[] args) {
        String s = "paper", t = "title";
        Solution solution = new Solution();
        boolean isomorphic = solution.isIsomorphic(s, t);
        System.out.println(isomorphic);
    }

    static class Solution {
        public boolean isIsomorphic(String s, String t) {
            return toIsomorphicStr(s).equals(toIsomorphicStr(t));
        }

        private String toIsomorphicStr(String s){
            //使用中间数组，将abb转成122
            int dict[] = new int[128];
            int count = 1;
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                if(dict[c] == 0){
                    dict[c] = count;
                    count++;
                }
                stringBuilder.append(dict[c]);
            }
            return stringBuilder.toString();
        }
    }
}
